<?php

require_once 'MainPageWidget.php';
class ScriptWidget extends MainPageWidget
/**
 * Класс ScriptWidget -- превращает PHP скрипт в виджет.
 *
 * Скрипт -- php файл, который что-то выводит (echo, print, var_dump и т.п.).
 *
 * В локальных переменных скрипта доступны все настройки из $this + $self в качестве ссылки на $this.
 *
 * Похоже на плагин шаблонного движка, но это виджет.
 *
 * @package RL
 * @author Lucky <lucky@jetstyle.ru>
 * @version $Id$
 */
{
	// вюьха-враппер для виджета
	public $widget_view = 'WG_Wrapper';
	// имя файла со скриптом
	//public $widget_script = '<widget.php>';
	//

	public function handle ($rh)
	{
		return $this->render();
	} // end of method handle
	public function render ()
	{
		$widget_script = $this->getParam('widget_script');
		if (NULL == $this->getParam('widget_title') || NULL == $this->getParam('widget_name')) {
			$t = basename($widget_script);
			$t = substr($t, 0, strrpos($t, '.'));
			$widget_name = $t;
			$this->setParamIfEmpty('widget_title', $widget_name);
			$this->setParamIfEmpty('widget_name', $widget_name);
		}
		if (false !== ($res = $this->call($widget_script))) {
			list($out_text, $out_data) = $res;
			$this->content['title'] = $this->getParam('widget_title');
			$this->content['body'] = $out_text;
		}
	} // end of function render

	public function call ($script, $args=array())
	{
		extract ((array)$this);
		$self = $this;
		extract ($args); // can override previous

		$code = dirname(__FILE__).'/scripts/'.$script;
		if (is_file($code) && is_readable($code)) {
			ob_start();
			$out_data = include $code;
			$out_text = ob_get_clean();
			$res = array($out_text, $out_data);
		} else {
			$res = false;
		}
		return $res;
	} // end of function call
}

